package com.killer.linear;

import java.util.List;

/**
 * 数组栈
 */
public class MyArrayStack<T> implements MyStack<T>{

    /**
     * 底层存储数组
     */
    private Object[] arrs;

    /**
     * 元素个数
     */
    private int size=0;

    public MyArrayStack(){
        //默认长度是4
        this.arrs = new Object[4];
    }

    /**
     * 往栈顶添加元素
     * @param t
     */
    public void push(T t){
        //先判断是否需要扩容
        if (size >= arrs.length) {
            //如果达到了数组的长度,则需要扩容
            resize();
        }
        arrs[size++]=t;
    }

    private void resize() {
        int capacity=arrs.length*2;
        Object[] newArrays = new Object[capacity];
        for(int i=0;i<arrs.length;i++) {
            newArrays[i]=arrs[i];
        }
        arrs=newArrays;
    }

    public T pop() {
        if (size <= 0) {
            throw new RuntimeException("栈已经为空了");
        }
        return (T)arrs[(size--)-1];
    }

    public int size() {
        return size;
    }


}
